#include"blockQueue.hpp"

using namespace zdl;

int main()
{
    auto* bq = new blockQueue<int>(5);  // 共享资源
    auto consumer = 
    [](void* args) ->void*
    {
        auto bq = static_cast<blockQueue<int>*> (args);
        // zdl:: 消费者一定要拿到自己想要的数据去！！！
        int data;
        while (true)
        {
            data = bq->pop();
            sleep(1);
            std::cout << "consumer get a data : " << data << std::endl;
        }

        return nullptr;
    };
    auto producter = 
    [](void* args) ->void*
    {
        auto bq = static_cast<blockQueue<int>*> (args);
        int data = 10;
        while (true)
        {
            sleep(2);
            // zdl:: 生产者一定要重别的地方拿到相应的数据
            bq->equeue(data);

            std::cout << "生产了一个数据: "  << data << std::endl;
            data++;
        }
        return nullptr;
    };

    //  ! 交易场所不知可以传递数，还可以传递任务
    pthread_t c, /*c1, p,*/ p; // 消费者和生产者    
    pthread_create(&c, nullptr, consumer, bq);
    // pthread_create(&c1, nullptr, consumer, bq);
    pthread_create(&p, nullptr, producter, bq);
    // pthread_create(&p1, nullptr, producter, bq);
    // pthread_create(&p2, nullptr, producter, bq);

    pthread_join(c, nullptr);
    pthread_join(p, nullptr);
    delete bq;
    return 0;
}